<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 字符匹配符 (字符集)
    // [xyz]   匹配集合中的任意一个  x或y或z
    // [0-9]   匹配数字  [0123456789]
    // [a-z]   匹配小写  [qwertyuiopasdfghjklzxcvbnm]
    // [A-Z]   匹配大写  [QWERTYUIOPASDFGHJKLZXCVBNM]
    // [0-9a-zA-Z_]  匹配数字 字母 下划线
    // [0-9a-zA-Z_$] 匹配数字 字母 下划线 $

    // 取反:
    // [^xyz]   匹配集合以外的任意字符  
    // [^0-9]   匹配非数字字符   
    // [^a-z]   匹配非小写字符   
    // [^A-Z]   匹配非大写字符   
    // [^0-9a-zA-Z_]  匹配非 数字,字母,下划线
    // [^0-9a-zA-Z_$] 匹配非 数字,字母,下划线,$

    // 注意:
    // 1. 在字符匹配符中,^ 写在最前面表示取反
    // 2. 在字符匹配符中,除 [ ] - ^ 转义字符 以外,都是普通字符


    // 官方给定的字符匹配符(字符簇):
    // \d   匹配数字    [0-9]
    // \D   匹配非数字  [^0-9]
    // \w   匹配数字,字母,下划线
    // \W   匹配非数字,字母,下划线
    // \s   匹配空白字符 
    // \S   匹配除空白字符以外的任意字符
    // .    除换行符(\n)以外的任意字符 
    // [\u4e00-\u9fa5]  匹配中文



    // 用户名:
    // 由 数字 字母 下划线 $ 组成, 6-12位, 且不能以数字开头

    var user = "哈哈123123";

    var reg = /^[0-9a-zA-Z_$]{6,12}$/;   // 由 数字 字母 下划线 $ 组成, 6-12位
    var reg = /^[^0-9][0-9a-zA-Z_$]{5,11}$/;   // 不能以数字开头
    var reg = /^[a-zA-Z_$][0-9a-zA-Z_$]{5,11}$/; // 由 数字 字母 下划线 $ 组成, 6-12位 ,不能以数字开头
    var reg = /^[a-zA-Z_$][\w$]{5,11}$/; // 由 数字 字母 下划线 $ 组成, 6-12位 ,不能以数字开头
    var reg = /^[a-zA-Z_$\u4e00-\u9fa5][\u4e00-\u9fa5\w$]{5,11}$/; // 由 数字 字母 下划线 $ 组成, 6-12位 ,不能以数字开头

    console.log(reg.test(user));


</script>

</html>